<?php

	/**
	 * Permite generar un Debug de las llamadas a metodos de los Class del Modelo.
     *
     * @category cormo
     * @package Core
     * @author Germán Dario Peraferrer <gperaferrer@gmail.com>
     * @copyright Copyright (c) 2007 Germán Dario Peraferrer - Beetec
     * @version 1.0 Beta
     * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
     * @link http://code.google.com/p/cormoframework/
     * @link http://www.beetec.com.ar
	 */

    abstract class Debug {

        /**
         * Obtiene el Array con el Debug de cada uno de los Archivos
         *
         * @return array Array con pila de llamadas identificadas por Archivo.
         */
        public static function getDebugBackTrace() {
            global $arrDebugBackTrace;
            // Verificamos si se activo el Debug
            if (CORMO_DEBUG) {
                return $arrDebugBackTrace;
            }
        }

        /**
         * Obtenemos el Back Trace generado hasta el momento desde que se marco con init()
         *
         * @global array $arrDebugBackTrace Variable de volcado de Back Trace
         */
        public static function init() {
            global $arrDebugBackTrace;
            $arrDebugBackTrace = array();
        }

        /**
         * Captura una llamada dentro del Back Trace
         *
         * @global array $arrDebugBackTrace Variable de volcado de Back Trace
         */
        public static function captureBackTrace() {
            global $arrDebugBackTrace;

            // Verificamos si se activo el Debug
            if (CORMO_DEBUG) {
                // Invertimos el BackTrce para comenzar desde el Archivo que invoco
                $arrTmpBackTrace = array_reverse(debug_backtrace());

                // Obtenemos el Nombre de Archivo y linea donde se comenzo a invocar
                $file = $arrTmpBackTrace[0]["file"];
                $line = $arrTmpBackTrace[0]["line"];

                // Recorremos el Back Trace
                foreach($arrTmpBackTrace as $arrBackTrace) {
                    // Verificamos si se trata de un Object
                    if (@is_object($arrBackTrace["args"][0])) {
                        $position = @count($arrDebugBackTrace[$file."(".$line.")"]);
                        @$arrDebugBackTrace[$file."(".$line.")"][$position] = $arrBackTrace["class"].$arrBackTrace["type"].$arrBackTrace["function"]."( ".get_class($arrBackTrace["args"][0])."[".$arrBackTrace["args"][0]."] )";
                    } else {
                        // Verificamos si se trata de un Array
                        if (@is_array($arrBackTrace["args"])) {
                            $position = @count($arrDebugBackTrace[$file."(".$line.")"]);
                            $strValues = "";
                            // Recorremos todos los valores de Array para convertirlos en String
                            foreach ($arrBackTrace["args"] as $value) {
                                // Verificamos si es null para poder visualizar el parametro
                                if (is_null($value)) {
                                    $strValues .= 'null, ';
                                } else {
                                    $strValues .= $value.', ';
                                }
                            }
                            $strValues = substr($strValues, 0, strlen($strValues)-2);
                            @$arrDebugBackTrace[$file."(".$line.")"][$position] = $arrBackTrace["class"].$arrBackTrace["type"].$arrBackTrace["function"]."(".$strValues.")";
                        } else {
                            $position = @count($arrDebugBackTrace[$file."(".$line.")"]);
                            @$arrDebugBackTrace[$file."(".$line.")"][$position] = $arrBackTrace["class"].$arrBackTrace["type"].$arrBackTrace["function"]."(".$arrBackTrace["args"][0].")";
                        }
                    }
                }
        
            }
        }

    }

?>
